package library

import (
	"log"
	"os"

	"gitee.com/xchengli/blog-lib/components"
	"gitee.com/xchengli/blog-lib/config"
	"gitee.com/xchengli/blog-lib/database"
	"gitee.com/xchengli/blog-lib/session"
	"gitee.com/xchengli/blog-lib/zlog"
)

// Init 初始化整个框架
func Init() {
	// 1. 初始化配置
	config.Init()

	// 2. 初始化日志系统
	zlog.Init()

	// 启动时日志记录
	ctx := components.NewContext()
	zlog.Info(ctx, "Service started")

	// 3. 初始化数据库连接
	database.InitRedis() // Redis连接
	database.Init()      // GORM和MySQL初始化

	// 4. 初始化会话管理
	session.Init()

	// 5. 初始化页面配置缓存
	InitPageConfig()

	// 6. 初始化错误日志文件
	InitLog()
}

// GetConfig 获取配置
func GetConfig() *config.Config {
	return config.GetConfig()
}

// GetTemplateFuncs 获取模板函数
func GetTemplateFuncs() map[string]interface{} {
	return components.GetTemplateFuncs()
}

// InitPageConfig 初始化页面配置缓存
// 将配置数据写入内存缓存以提高访问速度
func InitPageConfig() {
	// 这里需要根据新的结构进行调整
	// 暂时注释掉，等待后续完善
	/*
		model.Cache = make(map[string]interface{})
		//数据在启动的时候就写入缓存
		OptData := model.GetFieldsAll()
		for _, v := range OptData {
			model.Cache[v.Key] = v
		}
	*/
}

// InitLog 初始化日志系统
// 设置错误日志文件输出
func InitLog() {
	fd, err := os.OpenFile(config.RunCFG.ErrorLogFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
	if err != nil {
		log.Printf("Failed to open log file: %v", err)
		return
	}
	log.SetOutput(fd)
}

// Close 关闭框架资源
func Close() {
	// 关闭数据库连接
	database.Close()
}
